package chapter025;

/**
 * @author Jack魏
 * @date 2021-11-12
 * <p>
 * 多线程启动方法：
 * 方法一：继承Thread类
 *      线程的抽象
 * 方法二：实现Runnable接口
 *      对任务的抽象
 */
public class Point2 {
    /**
     * 继承Thread类, 实现run方法
     */
    public static class MyThread extends Thread {
        @Override
        public void run() {
            System.out.println("MyThread===" + Thread.currentThread().getName());
        }
    }

    /**
     * 实现Runnable接口
     */
    public static class MyRunnable implements Runnable {
        @Override
        public void run() {
            System.out.println("MyRunnable===" + Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        // 启动方法一
        myThread.start();
        myThread.stop();
        myThread.interrupt();

        MyRunnable myRunnable = new MyRunnable();
        // 这种方式启动还是主线程，没有单独线程启动
        myRunnable.run();
        // 方法二启动
        new Thread(myRunnable).start();
    }

    /**
     * 线程停止方法：
     * 1.stop()就像linux中的kill -9一样是非常暴力的，没有释放资源就直接停掉。
     * 2.interrupt()中断线程,发送中断信息，有时间释放资源。
     * 3.volatile关键字,线程之间的可见性
     * 4.自己结束
     */
}
